Make create_event() accept an Event in addition to a Hash

SortableEvents now passes pre-built events to create_event() instead of
directly calling `save!` on them. This is part of fixing DryRunnable
and SortableEvents not working together.

Akinori MUSHA 9 years ago
parent
commit
96c6d417c1
3 changed files with 20 additions and 12 deletions
  1. 4 3
      app/concerns/dry_runnable.rb
  2. 5 4
      app/concerns/sortable_events.rb
  3. 11 5
      app/models/agent.rb

+ 4 - 3
app/concerns/dry_runnable.rb

@@ -57,10 +57,11 @@ module DryRunnable
57 57
       logger.log(sev, message)
58 58
     end
59 59
 
60
-    def create_event(event_hash)
60
+    def create_event(event)
61 61
       if can_create_events?
62
-        @dry_run_results[:events] << event_hash[:payload]
63
-        events.build({ user: user, expires_at: new_event_expiration_date }.merge(event_hash))
62
+        event = build_event(event)
63
+        @dry_run_results[:events] << event.payload
64
+        event
64 65
       else
65 66
         error "This Agent cannot create events!"
66 67
       end

+ 5 - 4
app/concerns/sortable_events.rb

@@ -66,9 +66,11 @@ module SortableEvents
66 66
       end
67 67
     end
68 68
 
69
-    def create_event(attrs)
69
+    def create_event(event)
70 70
       if @sortable_events
71
-        @sortable_events << events.build({ user: user }.merge(attrs))
71
+        event = build_event(event)
72
+        @sortable_events << event
73
+        event
72 74
       else
73 75
         super
74 76
       end
@@ -82,8 +84,7 @@ module SortableEvents
82 84
     ensure
83 85
       events, @sortable_events = @sortable_events, nil
84 86
       sort_events(events).each do |event|
85
-        event.expires_at ||= new_event_expiration_date
86
-        event.save!
87
+        create_event(event)
87 88
       end
88 89
     end
89 90
   end

+ 11 - 5
app/models/agent.rb

@@ -105,12 +105,18 @@ class Agent < ActiveRecord::Base
105 105
     raise "Implement me in your subclass"
106 106
   end
107 107
 
108
-  def create_event(attrs)
108
+  def build_event(event)
109
+    event = events.build(event) if event.is_a?(Hash)
110
+    event.user = user
111
+    event.expires_at ||= new_event_expiration_date
112
+    event
113
+  end
114
+
115
+  def create_event(event)
109 116
     if can_create_events?
110
-      events.create!({
111
-         :user => user,
112
-         :expires_at => new_event_expiration_date
113
-      }.merge(attrs))
117
+      event = build_event(event)
118
+      event.save!
119
+      event
114 120
     else
115 121
       error "This Agent cannot create events!"
116 122
     end